Gabriel Vincent Postado 18 de março de 2011 Denunciar Compartilhar Postado 18 de março de 2011 (editado) Olá a todos! Eu preciso passar o valor de uma variável entre as classes. Mas toda vez que faço isso, a variável (que é do tipo int) passa a valer zero. Eu sei que isso é um problema de Obj-C, e não Cocoa Touch. Agradeceria muito se pudessem ajudar. O que eu tenho feito é o seguinte: RootViewController.m int var; var = 10; DetailViewController.h: RootViewController *rootViewController; DetailViewController.m int var2; var2 = rootViewController.var Considere os exemplos acima apenas como um pseudo-código Editado 18 de março de 2011 por Gabriel Vincent Citar Link para o comentário Compartilhar em outros sites More sharing options...
ferbass Postado 19 de março de 2011 Denunciar Compartilhar Postado 19 de março de 2011 Olá a todos! Eu preciso passar o valor de uma variável entre as classes. Mas toda vez que faço isso, a variável (que é do tipo int) passa a valer zero. Eu sei que isso é um problema de Obj-C, e não Cocoa Touch. Agradeceria muito se pudessem ajudar. O que eu tenho feito é o seguinte: RootViewController.m int var; var = 10; DetailViewController.h: RootViewController *rootViewController; DetailViewController.m int var2; var2 = rootViewController.var Considere os exemplos acima apenas como um pseudo-código Seguinte cara na classe que você vai receber o valor você precisa criar uma referencia dizendo que o valor "x" vai para a variavel "y" por exemplo RootViewController.h #import <UIKit/UIKit.h> #import "ExemploViewController.h" @interface RootViewController : UIViewController { int var; } @end ExemploViewController.h #import <UIKit/UIKit.h> @interface ExemploViewController : UIViewController { int varInt; } @property int varInt; @end Agora no no seu vamos criar uma ação para um votão que vai enviar o valor, neste caso criei um botão que chama uma view, mas já da para você ter ideia ... @implementation RootViewController - (IBAction)envia{ var = 10; ExemploViewController *exemplo = [[[ExemploViewController alloc] init] autorelease]; //aqui eu passo o valor da var para a variavel varInt que esta dentro de ExemploViewController como eu setei propriedades para esta variavel a classe me permite acessar ela de outras classes exemplo.varInt = var; [self.navigationController pushViewController:exemplo animated:YES]; } .... agora no seu ExemploViewController.m basta apenas fazer #import "ExemploViewController.h" @implementation ExemploViewController @synthesize varInt; - (void)viewDidLoad { [super viewDidLoad]; //Aqui vai printar o valor que esta em varInt NSLog(@"%d", varInt); } espero ter ajudado, eu fiz um post sobre propriedades no meu blog é legal você dar uma lida http://www.ferbass.com/2011/03/15/propriedades-em-objective-c/'>http://www.ferbass.com/2011/03/15/propriedades-em-objective-c/ Abraço Quer aprender mais sobre desenvolvimento iOS e MAC? http://www.ferbass.com Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 20 de março de 2011 Autor Denunciar Compartilhar Postado 20 de março de 2011 FIz desse modo que você sugeriu e acho que ele nem passa o valor. Var2 continua valendo 0. Citar Link para o comentário Compartilhar em outros sites More sharing options...
ferbass Postado 20 de março de 2011 Denunciar Compartilhar Postado 20 de março de 2011 posta parte do codigo como vc fez Abraço Quer aprender mais sobre desenvolvimento iOS e MAC? http://www.ferbass.com Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 20 de março de 2011 Autor Denunciar Compartilhar Postado 20 de março de 2011 (editado) posta parte do codigo como vc fez Abraço Quer aprender mais sobre desenvolvimento iOS e MAC? http://www.ferbass.com RootViewController.h #import <UIKit/UIKit.h> #import "DetailsViewController.h" @interface RootViewController : UITableViewController {; NSArray *things; NSString *test; } @property (nonatomic, retain) NSArray *things; @end RootViewController.m #import "RootViewController.h" @implementation RootViewController @synthesize things; #pragma mark - #pragma mark View lifecycle - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return YES; } - (void)viewDidLoad { [super viewDidLoad]; things = [[NSArray alloc] initWithObjects:@"1. Devise a secret code with your friends then hand in the homework in that code", @"2. Continually ask questions so that the professor can’t give homework", @"3. Answer the teacher’s questions in slow motion", @"4. Answer questions only with one word",nil]; // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem; } #pragma mark - #pragma mark Table view data source // Customize the number of sections in the table view. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } // Customize the number of rows in the table view. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [things count]; } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } // Configure the cell. cell.text = [[things objectAtIndex:indexPath.row] retain]; return cell; } #pragma mark - #pragma mark Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //[tableView deselectRowAtIndexPath:indexPath animated:YES]; NSString *rowText = [[things objectAtIndex:indexPath.row] retain]; NSLog(@"Row Text: %@", rowText); DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil]; // ... // Pass the selected object to the new view controller. DetailsViewController *obj = [[[DetailsViewController alloc] init] autorelease]; obj.detailText = rowText; [self.navigationController pushViewController:detailsViewController animated:YES]; [detailsViewController release]; [rowText release]; } #pragma mark - #pragma mark Memory management - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Relinquish ownership any cached data, images, etc that aren't in use. } - (void)viewDidUnload { // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. // For example: self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } @end DetailsViewController.h #import <UIKit/UIKit.h> @interface DetailsViewController : UIViewController { IBOutlet UILabel *detailLabel; NSString *detailText; } @property (nonatomic, retain) UILabel *detailLabel; @property (nonatomic, retain) NSString *detailText; @end DetailsViewController.m #import "DetailsViewController.h" #import "RootViewController.h" @implementation DetailsViewController @synthesize detailLabel, detailText; // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { detailText = @"Porra caraleo"; NSLog(@"%@", detailText); detailLabel.text = detailText; [super viewDidLoad]; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc. that aren't in use. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } @end Editado 20 de março de 2011 por Gabriel Vincent Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 28 de março de 2011 Autor Denunciar Compartilhar Postado 28 de março de 2011 Ninguém ainda?? =( Citar Link para o comentário Compartilhar em outros sites More sharing options...
thiago rariz Postado 29 de março de 2011 Denunciar Compartilhar Postado 29 de março de 2011 (editado) isso aqui ta errado 1 DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil]; 2 // ... 3 // Pass the selected object to the new view controller. 4 DetailsViewController *obj = [[[DetailsViewController alloc] init] autorelease]; 5 obj.detailText = rowText; 6 [self.navigationController pushViewController:detailsViewController animated:YES]; numerei para facilitar pq vc esta instanciando 2 vezes o mesmo viewController (linhas 1 e 4)?? E ainda esta passando o valor da variavel para um viewController (linha 5) e puxando o outro (linha 6)....ai fica dificil funcionar. Elimine a linha 4 e na linha 5 faça assim: detailsViewController.detailText = rowText; mantenha a linha 6.....deve funcionar corretamente... Editado 29 de março de 2011 por thiago rariz Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 30 de março de 2011 Autor Denunciar Compartilhar Postado 30 de março de 2011 (editado) isso aqui ta errado 1 DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil]; 2 // ... 3 // Pass the selected object to the new view controller. 4 DetailsViewController *obj = [[[DetailsViewController alloc] init] autorelease]; 5 obj.detailText = rowText; 6 [self.navigationController pushViewController:detailsViewController animated:YES]; numerei para facilitar pq vc esta instanciando 2 vezes o mesmo viewController (linhas 1 e 4)?? E ainda esta passando o valor da variavel para um viewController (linha 5) e puxando o outro (linha 6)....ai fica dificil funcionar. Elimine a linha 4 e na linha 5 faça assim: detailsViewController.detailText = rowText; mantenha a linha 6.....deve funcionar corretamente... Caro Thiago: Muito obrigado do fundo do meu coração. É impossível dizer em palavras como eu estou feliz de ter feito meu programa funcionar. Estou nesse momento mal conseguindo digitar pois estou dançando freneticamente pelo quarto, de tanta felicidade. Já estava ficando maluco por causa desse problema. Perdoe-me se meu texto parece um tanto sarcástico, sei que o sou às vezes, quando quero demonstrar felicidade. Mais uma vez: muito obrigado! Gabriel Vincent Editado 30 de março de 2011 por Gabriel Vincent Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe do debate
Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.